import 'dart:io';

main() async {
  // async 函数返回的是一个 Future 对象
  // await 关键字只能在 async 函数中使用
  // await 关键字后面可以跟一个 Future 对象
  // await 关键字会等待 Future 对象执行完毕，然后返回结果
  // await 关键字可以暂停 async 函数的执行，等待 Future 对象执行完毕
  // await 关键字后面的代码会在 Future 对象执行完毕后执行
  print('程序开始，准备请求参数');
  try {
    int res = await getRequest();
    print('第一个函数执行完成, 结果是：$res');
    int res2 = await getRequest2();
    print('第二个函数执行完成, 结果是：$res2');
    int res3 = await getRequest3();
    print('第三个函数执行完成, 结果是：$res3');
  } catch (err) {
    print('请求失败：$err');
  } finally {
    print('请求完成, 不管请求成功，还是失败，都要执行');
  }
  // async await 会阻塞后面的代码执行，then不会
  print('其他业务逻辑');

}

Future<int> getRequest() {
  return Future(() {
    sleep(Duration(seconds: 3));
    return 10;
  });
}

Future<int> getRequest2() {
  return Future(() {
    sleep(Duration(seconds: 3));
    return 20;
  });
}

Future<int> getRequest3() {
  return Future(() {
    sleep(Duration(seconds: 3));
    return 30;
  });
}